Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
N+1問題が起きる原因について調べてみた
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
smallmonkeykey
January 19, 2024
51
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
N+1問題が起きる原因について調べてみた
学習中の者です。
1月11日のOmotesando.rbで、初めてのLTをしました。
smallmonkeykey
January 19, 2024
More Decks by smallmonkeykey
See All by smallmonkeykey
投票アプリの反省と新機能
smallmonkeykey
0
65
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
25k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Deep Space Network (abreviated)
tonyrice
0
300
The Cost Of JavaScript in 2023
addyosmani
55
10k
Crafting Experiences
bethany
1
310
Documentation Writing (for coders)
carmenintech
77
5.5k
Fireside Chat
paigeccino
42
4k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
HDC tutorial
michielstock
2
860
Designing Experiences People Love
moore
143
24k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
260
Transcript
N+1問題が起きる原因に ついて調べてみた 2024/1/11
自己紹介 リサ ・現在fjordbootcampで学習中 ・好きな生き物は犬と猿
なぜN+1について話すのか ・Ruby on Railsの課題で毎度N+1問題に指摘される ・指摘されるまで気づかない → 理解できていない
・each を使う時にN+1がこのままじゃ起きるよ!とレ ビューを頂いている印象 学習前のイメージ ・each文に原因があるのでは!?
テーブル
関連付け user.rb article.rb
article.titleの場合のSQL Article Load (0.5ms) SELECT "articles".* FROM "articles"
article.user.name の場合のSQL Article Load (0.5ms) SELECT "articles".* FROM "articles" 1回
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]] User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 3], ["LIMIT", 1]] N回(ここでは3回)
結果 each文がN+1を引き起こす原因なのではなく、 each文の中で、articleに紐づいている、userのデータを毎回取得しにいってい ることが原因
LTの準備を通して気づいたこと
自分が今つまづいている部分だけを切りとる ・FBCの課題をしていると、全体的なコード量が多いので複雑になって しまう ・自分がわからないところだけをピックアップした、最小限のアプリ ケーションを作成する
わからないを放置しない ・FBCにいると早く課題を進めた方が良いのではという気持ちががあって先 走ってしまい、一つ一つを丁寧に理解することがおろそかになっていた ・遠まりが一番の近道 ・自分の中に、質問係をつくり、質問してもらい、それに答えられるかという のをする 答え N+1はなぜ起こるの?
LTに参加ボタンを押すと良いことがある ・【RubyでつくるRuby ゼロから学びなおすプログラミング言語入門】 → 積読してあった本を読んだ! ・再帰 について調べた → 新しい知識を得られた! ・rubyでリップ(口紅)の色を調べてみた → 新たなgemについて学べた!
ご清聴 ありがとうございました!